
#include "../libreria.h"
#include "../response_get_image.h"
#include <signal.h>
int s;
void deregistra(int sig_receive)
{
	close(s);
}

int main(int argc, char * argv[])
{
	char lunghezza_file [BUFFER_SIZE];
	char msg [BUFFER_SIZE];
	char nome_servizio [BUFFER_SIZE];
	char nome_immagine [BUFFER_SIZE];
	char ip_service_register [BUFFER_SIZE];
	int porta_service_register;
	int i;
	
	int r;
	int len_file;
	host service_provider;

	signal(SIGINT,deregistra);

	i = 0;
	if (argc != 5)
	{
		printf("Errore numero parametri:\nUsage: ./client_get_image ip_service_register porta_service_register nome_servizio nome_immagine.jpg\n");
		exit(1);
	}

	strcpy( ip_service_register, argv[1] );
	porta_service_register = atoi(argv[2]);
	strcpy( nome_servizio, argv[3] );
	strcpy( nome_immagine, argv[4] );

	/////////// INIZIALIZZAZIONE SOCKET PER CONNESSIONE SERVICE REGISTER /////////////

	s = inizializza_client( ip_service_register, porta_service_register );

	////////// INVIO MESSAGGI PER CONTATTARE SERVICE REGISTER //////////////
	
	sprintf(msg,"2;%s#",argv[3]);
	if(send(s,msg,strlen(msg),0) == -1)
	{	
		printf("Errore nell'invio del messaggio per contattare il Service Register\n");
		exit(1);
	}	

	/////////// RICEZIONE RISPOSTA DA SERVICE REGISTER ////////////////////
	
	memset( msg, 0, BUFFER_SIZE );
	r = recv( s, &msg[0], BUFFER_SIZE,0 );
	if (r == -1)
	{
		printf("Errore ricezione risposta dal Service Register\n");
		exit(1);
	}
	if(msg[0] == '0')
	{ 
		printf("Errore, il servizio richiesto non è disponibile\n");
		exit(1);
	}
	
	decode_msg_from_service_register( msg, service_provider.ip, &service_provider.porta );

	close(s);
	
	////////////////  CHIUSA CONNESSIONE CON SERVICE REGISTER  //////////////////


	////////// INIZIALIZZAZIONE CONNESSIONE CON SERVICE PROVIDER ////////////////
	
	service_provider.s = inizializza_client( service_provider.ip, service_provider.porta );	

	printf("CONNESSO con il Service Provider %s:%d\n", service_provider.ip, service_provider.porta);

	////////// INVIO IMMAGINE AL SERVICE PROVIDER ///////////////

	memset( msg, 0, BUFFER_SIZE );
	
	Response_Get_Image rgi(service_provider);
	
	rgi.code_request( msg, nome_immagine );

	if(!rgi.decode_response( msg, lunghezza_file ))
	{	
		printf("Errore nella codifica della richiesta o nella decodifica della ricezione della lunghezza dell'immagine\n");
		exit(1);
	}

	len_file=atoi(lunghezza_file);

	rgi.receive_image( nome_immagine, len_file ); //Invio del messaggio codificato e successivamente del file

	printf("Immagine %s ricevuta correttamente!\n", nome_immagine);
		
	close(service_provider.s); 

}

